#ifndef DS_VECTOR_VECTOR_H_
#define DS_VECTOR_VECTOR_H_

namespace ds
{
    typedef int Rank; //秩
    const int KDefaultCapacity = 3;

    template <typename T>
    class Vector
    {
    private:
        Rank size_; //vector已存放个数
        int capacity_;
        T *elem_; //数组首地址

        void CopyFrom(const T *A, Rank lo, Rank hi);
        void expend();

    public:
        //构造函数
        Vector(int c = KDefaultCapacity, int s = 0, T v = 0) : elem_(new T[capacity_ = c]), size_(0) {}
        Vector(const T *A, Rank lo, Rank hi);         //数组区间复制
        Vector(const Vector<T> &v, Rank lo, Rank hi); //向量区间复制
        Vector(const Vector<T> &v);                   //向量区间整体复制
        //可写访问接口
        T &operator[](Rank r) const;
        Rank insert(Rank r, const T &e);
        int remove(Rank lo, Rank hi);
        T remove(Rank r);
        int deduplicate();//无序去重   
        //析构函数
        ~Vector() { delete[] elem_ }
    };

} // namespace ds

#endif